package org.example.demo1.config;

import org.example.demo1.Entity.FeedBackRequest;
import org.example.demo1.ai.ChatRedisMemory;
import org.example.demo1.service.FeedbackCollectionService;
import org.example.demo1.service.PodCPUMemoryTools;
import org.example.demo1.service.PodTools;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.client.advisor.*;
import org.springframework.ai.chat.memory.ChatMemory;
import org.springframework.ai.chat.memory.InMemoryChatMemory;
import org.springframework.ai.vectorstore.VectorStore;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.core.RedisTemplate;

import java.util.List;


//springAi需要的配置
@Configuration
public class AiConfig {
    @Autowired
    VectorStore vectorStore;

    @Autowired
    FeedbackCollectionService feedbackService;

    @Bean
    ChatClient chatClient(ChatClient.Builder builder) {
        return builder.defaultSystem("你是一个专业的集群运维 AI 助手，你的名字叫 K8s 智能专家。你的工作方式如下：\n" +
                "\n" +
                "独立分析任务\n" +
                "收到用户请求后，先独立思考和分析任务内容，合理拆解为具体步骤，并判断每一步是否需要调用工具。\n" +
                "\n" +
                "谨慎调用工具\n" +
                "只有在明确判断需要的情况下，才调用合适的工具执行任务。避免不必要的工具调用，保持操作高效、精准。\n" +
                "\n" +
                "透明反馈与总结\n" +
                "每次回答时，请简要回顾上一步你已经完成的工作，并清楚说明本次采取的行动和理由。如果遇到无法完成的环节，说明原因（如缺少工具、权限或信息）并给出解决建议。\n" +
                "\n" +
                "持续优化\n" +
                "在任务执行过程中，不断反思与总结经验，优化任务分析与工具调用逻辑。\n" +
                "\n" +
                "请始终以专业、耐心、清晰的表达，与用户保持良好沟通。").defaultAdvisors(//所有问答接口均完成对话记忆
                QuestionAnswerAdvisor.builder(vectorStore).order(1).build()//限制k8s智能机器人只能根据向量数据库中的内容回复
                , SafeGuardAdvisor.builder().sensitiveWords(List.of("色情", "暴力", "政治")).order(2).failureResponse("涉及敏感词汇，无法回答此类问题").build()
                , new SimpleLoggerAdvisor()//用于测试和监控ai互动
        ).build();
    }

    @Bean
    ChatClient toolClient(ChatClient.Builder builder){
        return builder.defaultTools(new PodTools(),new PodCPUMemoryTools()).defaultSystem("你是一个智能机器人,你的名字叫 K8s 智能专家").defaultAdvisors(//所有问答接口均完成对话记忆
                QuestionAnswerAdvisor.builder(vectorStore).order(1).build()//限制k8s智能机器人只能根据向量数据库中的内容回复
                , SafeGuardAdvisor.builder().sensitiveWords(List.of("色情", "暴力", "政治")).order(2).failureResponse("涉及敏感词汇，无法回答此类问题").build()
                , new SimpleLoggerAdvisor()//用于测试和监控ai互动
        ).build();
    }

    @Bean
    InMemoryChatMemory inMemoryChatMemory() {
        return new InMemoryChatMemory();
    }

    @Bean
    public ChatMemory chatMemory(RedisTemplate<String, Object> redisTemplate) {
        return new ChatRedisMemory(redisTemplate);
    }
}
